home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / cprog / f2c3.2src.lha / f2c-for-SASC651 / src / gram.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-29  |  56.0 KB  |  1,828 lines

  1. # define SEOS 1
  2. # define SCOMMENT 2
  3. # define SLABEL 3
  4. # define SUNKNOWN 4
  5. # define SHOLLERITH 5
  6. # define SICON 6
  7. # define SRCON 7
  8. # define SDCON 8
  9. # define SBITCON 9
  10. # define SOCTCON 10
  11. # define SHEXCON 11
  12. # define STRUE 12
  13. # define SFALSE 13
  14. # define SNAME 14
  15. # define SNAMEEQ 15
  16. # define SFIELD 16
  17. # define SSCALE 17
  18. # define SINCLUDE 18
  19. # define SLET 19
  20. # define SASSIGN 20
  21. # define SAUTOMATIC 21
  22. # define SBACKSPACE 22
  23. # define SBLOCK 23
  24. # define SCALL 24
  25. # define SCHARACTER 25
  26. # define SCLOSE 26
  27. # define SCOMMON 27
  28. # define SCOMPLEX 28
  29. # define SCONTINUE 29
  30. # define SDATA 30
  31. # define SDCOMPLEX 31
  32. # define SDIMENSION 32
  33. # define SDO 33
  34. # define SDOUBLE 34
  35. # define SELSE 35
  36. # define SELSEIF 36
  37. # define SEND 37
  38. # define SENDFILE 38
  39. # define SENDIF 39
  40. # define SENTRY 40
  41. # define SEQUIV 41
  42. # define SEXTERNAL 42
  43. # define SFORMAT 43
  44. # define SFUNCTION 44
  45. # define SGOTO 45
  46. # define SASGOTO 46
  47. # define SCOMPGOTO 47
  48. # define SARITHIF 48
  49. # define SLOGIF 49
  50. # define SIMPLICIT 50
  51. # define SINQUIRE 51
  52. # define SINTEGER 52
  53. # define SINTRINSIC 53
  54. # define SLOGICAL 54
  55. # define SNAMELIST 55
  56. # define SOPEN 56
  57. # define SPARAM 57
  58. # define SPAUSE 58
  59. # define SPRINT 59
  60. # define SPROGRAM 60
  61. # define SPUNCH 61
  62. # define SREAD 62
  63. # define SREAL 63
  64. # define SRETURN 64
  65. # define SREWIND 65
  66. # define SSAVE 66
  67. # define SSTATIC 67
  68. # define SSTOP 68
  69. # define SSUBROUTINE 69
  70. # define STHEN 70
  71. # define STO 71
  72. # define SUNDEFINED 72
  73. # define SWRITE 73
  74. # define SLPAR 74
  75. # define SRPAR 75
  76. # define SEQUALS 76
  77. # define SCOLON 77
  78. # define SCOMMA 78
  79. # define SCURRENCY 79
  80. # define SPLUS 80
  81. # define SMINUS 81
  82. # define SSTAR 82
  83. # define SSLASH 83
  84. # define SPOWER 84
  85. # define SCONCAT 85
  86. # define SAND 86
  87. # define SOR 87
  88. # define SNEQV 88
  89. # define SEQV 89
  90. # define SNOT 90
  91. # define SEQ 91
  92. # define SLT 92
  93. # define SGT 93
  94. # define SLE 94
  95. # define SGE 95
  96. # define SNE 96
  97. # define SENDDO 97
  98. # define SWHILE 98
  99. # define SSLASHD 99
  100. # define SBYTE 100
  101.  
  102. /* # line 125 "gram.in" */
  103. #include "defs.h"
  104. #include "p1defs.h"
  105.  
  106. static int nstars;            /* Number of labels in an
  107.                        alternate return CALL */
  108. static int datagripe;
  109. static int ndim;
  110. static int vartype;
  111. int new_dcl;
  112. static ftnint varleng;
  113. static struct Dims dims[MAXDIM+1];
  114. extern struct Labelblock **labarray;    /* Labels in an alternate
  115.                            return CALL */
  116. extern int maxlablist;
  117.  
  118. /* The next two variables are used to verify that each statement might be reached
  119.    during runtime.   lastwasbranch   is tested only in the defintion of the
  120.    stat:   nonterminal. */
  121.  
  122. int lastwasbranch = NO;
  123. static int thiswasbranch = NO;
  124. extern ftnint yystno;
  125. extern flag intonly;
  126. static chainp datastack;
  127. extern long laststfcn, thisstno;
  128. extern int can_include;    /* for netlib */
  129.  
  130. #define ESNULL (Extsym *)0
  131. #define NPNULL (Namep)0
  132. #define LBNULL (struct Listblock *)0
  133.  
  134.  static void
  135. pop_datastack(Void) {
  136.     chainp d0 = datastack;
  137.     if (d0->datap)
  138.         curdtp = (chainp)d0->datap;
  139.     datastack = d0->nextp;
  140.     d0->nextp = 0;
  141.     frchain(&d0);
  142.     }
  143.  
  144.  
  145. /* # line 170 "gram.in" */
  146. typedef union     {
  147.     int ival;
  148.     ftnint lval;
  149.     char *charpval;
  150.     chainp chval;
  151.     tagptr tagval;
  152.     expptr expval;
  153.     struct Labelblock *labval;
  154.     struct Nameblock *namval;
  155.     struct Eqvchain *eqvval;
  156.     Extsym *extval;
  157.     } YYSTYPE;
  158. #define yyclearin yychar = -1
  159. #define yyerrok yyerrflag = 0
  160. extern int yychar;
  161. typedef int yytabelem;
  162. extern yytabelem yyerrflag;
  163. #ifndef YYMAXDEPTH
  164. #define YYMAXDEPTH 150
  165. #endif
  166. YYSTYPE yylval, yyval;
  167. # define YYERRCODE 256
  168. yytabelem yyexca[] ={
  169. -1, 1,
  170.     0, -1,
  171.     -2, 0,
  172. -1, 20,
  173.     1, 38,
  174.     -2, 229,
  175. -1, 24,
  176.     1, 42,
  177.     -2, 229,
  178. -1, 123,
  179.     6, 241,
  180.     -2, 229,
  181. -1, 151,
  182.     1, 245,
  183.     -2, 189,
  184. -1, 175,
  185.     1, 266,
  186.     78, 266,
  187.     -2, 189,
  188. -1, 224,
  189.     77, 174,
  190.     -2, 140,
  191. -1, 246,
  192.     74, 229,
  193.     -2, 226,
  194. -1, 272,
  195.     1, 287,
  196.     -2, 144,
  197. -1, 276,
  198.     1, 296,
  199.     78, 296,
  200.     -2, 146,
  201. -1, 329,
  202.     77, 175,
  203.     -2, 142,
  204. -1, 359,
  205.     1, 268,
  206.     14, 268,
  207.     74, 268,
  208.     78, 268,
  209.     -2, 190,
  210. -1, 437,
  211.     91, 0,
  212.     92, 0,
  213.     93, 0,
  214.     94, 0,
  215.     95, 0,
  216.     96, 0,
  217.     -2, 154,
  218. -1, 454,
  219.     1, 290,
  220.     78, 290,
  221.     -2, 144,
  222. -1, 456,
  223.     1, 292,
  224.     78, 292,
  225.     -2, 144,
  226. -1, 458,
  227.     1, 294,
  228.     78, 294,
  229.     -2, 144,
  230. -1, 460,
  231.     1, 297,
  232.     78, 297,
  233.     -2, 145,
  234. -1, 505,
  235.     78, 290,
  236.     -2, 144,
  237.     };
  238. # define YYNPROD 302
  239. # define YYLAST 1385
  240. yytabelem yyact[]={
  241.  
  242.  238, 275, 472, 318, 317, 413, 421, 298, 471, 305,
  243.  414, 398, 387, 358, 129, 267, 357, 327, 293, 400,
  244.  253, 202, 296, 230, 399, 223, 304, 100,   5, 117,
  245.   17, 265, 185, 204, 314, 274, 200, 211, 104, 271,
  246.  119, 337, 203, 184, 261, 121, 237, 120, 107, 235,
  247.  196, 102, 112, 122, 397, 513, 104, 105, 166, 167,
  248.  335, 336, 337, 343, 342, 341, 340, 339, 191, 344,
  249.  346, 345, 348, 347, 349, 396, 312, 158, 106, 158,
  250.  310, 273, 166, 167, 259, 260, 261, 262, 115, 130,
  251.  279, 397, 131, 132, 133, 134, 536, 136, 522, 476,
  252.  484, 138, 466, 166, 167, 335, 336, 337, 343, 342,
  253.  341, 340, 339, 540, 344, 346, 345, 348, 347, 349,
  254.  103,  95, 319, 156, 295, 156, 335, 336, 337, 118,
  255.  187, 188, 259, 260, 261, 104,  96,  97,  98, 526,
  256.  186, 523, 410, 101, 231, 241, 241, 409, 195, 194,
  257.  528, 212, 485, 447, 481, 158, 463, 220, 258, 158,
  258.  244, 240, 242, 166, 167, 335, 336, 337, 214,  99,
  259.  221, 219, 216, 158, 166, 167, 335, 336, 337, 343,
  260.  342, 341, 215, 104, 158, 344, 346, 345, 348, 347,
  261.  349, 166, 167, 335, 336, 337, 343, 103, 103, 103,
  262.  103, 156, 190, 101, 121, 156, 120, 193, 462, 104,
  263.  197, 198, 199, 461, 372, 321, 322, 207, 278, 156,
  264.  301, 189, 289, 300, 325, 316, 329, 276, 276, 331,
  265.  156, 453, 334, 197, 217, 218, 351, 309, 311, 444,
  266.  353, 354, 334, 269, 290, 355, 350, 266, 429, 246,
  267.  258, 248, 482, 158, 251, 483, 287, 288, 363, 158,
  268.  158, 158, 158, 158, 258, 258, 469, 324, 378, 470,
  269.  291, 280, 281, 282, 356, 464, 334, 295, 465, 379,
  270.  451,   4, 377, 428, 258, 166, 167, 259, 260, 261,
  271.  262, 103, 233, 448, 294, 376, 447, 270, 373, 156,
  272.  401, 374, 375, 208, 178, 156, 156, 156, 156, 156,
  273.  118, 393, 315, 382, 320, 113, 418, 407, 197, 419,
  274.  408, 391, 334, 334, 392, 351, 334, 276, 111, 425,
  275.  334, 151, 334, 175, 411, 231, 433, 434, 435, 436,
  276.  437, 438, 439, 440, 441, 442, 404, 157, 110, 402,
  277.  360, 406, 334, 361, 334, 334, 334, 432, 389, 381,
  278.  109, 108, 158, 258, 334, 423, 420, 258, 258, 258,
  279.  258, 258, 388, 236, 383, 384, 332, 495, 222, 333,
  280.  334, 224, 449, 423, 371, 537, 533, 532, 452, 166,
  281.  167, 259, 260, 261, 262, 531, 527, 473, 401, 530,
  282.  525, 403, 197, 166, 167, 259, 260, 261, 156, 475,
  283.  493, 468, 417, 467, 427, 104, 297, 446, 422, 137,
  284.  480, 477, 487, 104, 489, 491, 276, 276, 276, 150,
  285.  241, 497, 430, 385, 334, 334, 334, 334, 334, 334,
  286.  334, 334, 334, 334, 404, 498, 496, 402, 404, 488,
  287.  155, 258, 155, 494, 486, 192, 308, 503, 455, 457,
  288.  459, 501, 286, 500, 247, 506, 507, 508, 243, 452,
  289.  272, 272, 473, 227, 334, 307, 502, 401, 509, 512,
  290.  224, 201, 511, 269, 213, 517, 210, 516, 334, 518,
  291.  334, 480, 334, 521, 294, 519, 515, 241, 334, 403,
  292.  524, 514, 249, 403, 529, 172, 263, 171, 173, 177,
  293.  142, 276, 276, 276, 330, 535, 534, 492,  30, 104,
  294.  264, 315, 415, 404, 510, 538, 402, 352, 155, 388,
  295.  334, 283, 155, 209, 245, 226, 334,  93,   6, 334,
  296.  539, 250,  82, 455, 457, 459, 155, 268,  81,  80,
  297.   79, 174, 124,  78, 541, 504,  77, 155,  76,  60,
  298.   49,  48,  45, 504, 504, 504,  33, 114, 206, 412,
  299.  380, 205, 395, 394, 299, 303, 479, 306, 403, 135,
  300.  390, 313, 116, 504,  26,  25, 359, 520,  24,  23,
  301.  320, 166, 167, 259, 260, 261, 262,  22,  21, 386,
  302.  362, 285,   9,   8,   7,   2, 366, 367, 368, 369,
  303.  370, 302,  20, 165,  51, 490, 352, 292, 229, 328,
  304.  326, 416,  92, 256,  53, 338, 155,  19,  55,  37,
  305.  225,   3, 155, 155, 155, 155, 155,   1,   0,   0,
  306.  268, 460,   0, 268, 268,   0, 166, 167, 335, 336,
  307.  337, 343, 342, 341, 340, 339,   0, 344, 346, 345,
  308.  348, 347, 349, 166, 167, 335, 336, 337, 343, 454,
  309.  456, 458,   0,   0, 344, 346, 345, 348, 347, 349,
  310.    0, 306,   0, 445,   0,   0,   0,   0, 166, 167,
  311.  335, 336, 337, 343, 342, 341, 340, 339, 352, 344,
  312.  346, 345, 348, 347, 349, 443,   0,   0,   0, 450,
  313.  166, 167, 335, 336, 337, 343, 342, 341, 340, 339,
  314.    0, 344, 346, 345, 348, 347, 349, 166, 167, 335,
  315.  336, 337, 343, 342,   0, 155,   0, 499, 344, 346,
  316.  345, 348, 347, 349,   0,   0, 268,   0,   0,   0,
  317.    0,   0, 431,   0, 505, 456, 458, 166, 167, 335,
  318.  336, 337, 343, 342, 341, 340, 339,   0, 344, 346,
  319.  345, 348, 347, 349,   0,   0,   0,   0,   0,   0,
  320.  424,   0, 478,   0, 306, 166, 167, 335, 336, 337,
  321.  343, 342, 341, 340, 339,   0, 344, 346, 345, 348,
  322.  347, 349, 166, 167, 335, 336, 337, 343, 342, 341,
  323.  340, 339,   0, 344, 346, 345, 348, 347, 349,   0,
  324.    0,   0,   0,   0,   0,   0,   0, 268, 161, 162,
  325.  163, 164, 170, 169, 168, 159, 160, 104,   0,   0,
  326.    0,   0,  12,   0,   0,   0,   0,   0,   0,   0,
  327.    0,   0,   0,   0,   0, 306,  10,  56,  46,  73,
  328.   86,  14,  61,  70,  91,  38,  66,  47,  42,  68,
  329.   72,  31,  67,  35,  34,  11,  88,  36,  18,  41,
  330.   39,  28,  16,  57,  58,  59,  50,  54,  43,  89,
  331.   64,  40,  69,  44,  90,  29,  62,  85,  13,   0,
  332.   83,  65,  52,  87,  27,  74,  63,  15,  73,   0,
  333.   71,  84,  70,   0,   0,  66,   0,   0,  68,  72,
  334.    0,  67, 161, 162, 163, 164, 170, 169, 168, 159,
  335.  160, 104,   0,   0,   0,  32,   0,   0,  75,  64,
  336.    0,  69,   0,   0,   0,   0,   0,   0,   0,   0,
  337.   65,   0,   0,   0,  74,   0,   0,   0,   0,  71,
  338.  161, 162, 163, 164, 170, 169, 168, 159, 160, 104,
  339.    0, 161, 162, 163, 164, 170, 169, 168, 159, 160,
  340.  104,   0,   0,   0,   0,   0,   0,  75,   0,   0,
  341.    0, 234,   0,   0,   0,   0,   0, 166, 167, 364,
  342.    0, 365,   0,   0,   0,   0,   0, 239, 161, 162,
  343.  163, 164, 170, 169, 168, 159, 160, 104,   0, 161,
  344.  162, 163, 164, 170, 169, 168, 159, 160, 104, 234,
  345.  228,   0,   0,   0,   0, 166, 167, 232,   0,   0,
  346.  234,   0,   0,   0,   0, 239, 166, 167, 474,   0,
  347.    0,   0,   0,   0,  94,   0, 239, 161, 162, 163,
  348.  164, 170, 169, 168, 159, 160, 104,   0,   0,   0,
  349.    0,   0,   0,   0,   0,   0,   0, 234,   0,   0,
  350.    0,   0,   0, 166, 167, 232, 123,   0, 234, 126,
  351.  127, 128,   0, 239, 166, 167, 426,   0,   0,   0,
  352.    0, 139, 140,   0, 239, 141,   0, 143, 144, 145,
  353.    0,   0, 146, 147, 148,   0, 149,   0,   0,   0,
  354.    0,   0,   0,   0,   0,   0, 234,   0,   0,   0,
  355.    0,   0, 166, 167,   0,   0, 179, 180, 181, 182,
  356.  183,   0, 239, 161, 162, 163, 164, 170, 169, 168,
  357.  159, 160, 104,   0, 161, 162, 163, 164, 170, 169,
  358.  168, 159, 160, 104,   0, 161, 162, 163, 164, 170,
  359.  169, 168, 159, 160, 104, 257, 161, 162, 163, 164,
  360.  170, 169, 168, 159, 160, 104,   0, 161, 162, 163,
  361.  164, 170, 169, 168, 159, 160, 104, 161, 162, 163,
  362.  164, 170, 169, 168, 159, 160, 104,   0,   0,   0,
  363.    0,   0, 277,   0,   0,   0,   0,   0, 166, 167,
  364.    0,   0,   0, 323,   0,   0,   0,   0, 239, 166,
  365.  167,   0,   0,   0, 252,   0,   0,   0,   0, 239,
  366.  166, 167, 254,   0, 255, 154,   0,   0,   0,   0,
  367.    0, 166, 167, 152,   0, 153, 252,   0,   0,   0,
  368.    0,   0, 166, 167, 284,   0, 154,   0,   0,   0,
  369.    0,   0, 166, 167, 176, 161, 162, 163, 164, 170,
  370.  169, 168, 159, 160, 104, 161, 162, 163, 164, 170,
  371.  169, 168, 159, 160, 104,   0,   0,   0,   0,   0,
  372.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  373.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  374.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  375.   56,  46,   0,  86,   0,  61,   0,  91,   0,   0,
  376.   47,   0,   0,   0, 405,   0,   0,   0,   0,  88,
  377.  166, 167,   0,   0, 252,   0,  57,  58,  59,  50,
  378.  166, 167,  89,   0,   0,   0,   0,  90,   0,  62,
  379.   85,   0,   0,  83,   0,  52,  87,   0,   0,  63,
  380.    0, 125,   0,   0,  84 };
  381. yytabelem yypact[]={
  382.  
  383. -1000,  25, 537, 838,-1000,-1000,-1000,-1000,-1000,-1000,
  384.  532,-1000,-1000,-1000,-1000,-1000,-1000, 125, 505, -21,
  385.  283, 282, 270, 250,  65, 237,   5, 121,-1000,-1000,
  386. -1000,-1000,-1000,1311,-1000,-1000,-1000,   7,-1000,-1000,
  387. -1000,-1000,-1000,-1000,-1000, 505,-1000,-1000,-1000,-1000,
  388. -1000, 436,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  389. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  390. -1000,-1000,-1000,-1000,-1000,-1000,1171, 431,1192, 431,
  391.  226,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  392. -1000,-1000,-1000,-1000,-1000, 505, 505, 505, 505,-1000,
  393.  505,-1000, 381,-1000,-1000, 505,-1000, -38, 505, 505,
  394.  505, 407,-1000,-1000,-1000, 505, 225,-1000,-1000,-1000,
  395. -1000, 519, 412,  65,-1000,-1000, 410,-1000,-1000,-1000,
  396. -1000, 121, 505, 505, 407,-1000,-1000, 302, 406, 529,
  397. -1000, 399, 955,1052,1052, 394, 528, 505, 390, 505,
  398. -1000,-1000,-1000,-1000,1160,-1000,-1000,   2,1280,-1000,
  399. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  400. -1000,-1000,1160, 169, 219,-1000,-1000,1138,1138,-1000,
  401. -1000,-1000,-1000,1182, 388,-1000,-1000, 381, 381, 505,
  402. -1000,-1000, 195, 342,-1000,  65,-1000, 342,-1000,-1000,
  403. -1000, 505,-1000, 401,-1000, 382, 887,  -3, 121,  -7,
  404.  505, 528,  24,1052,1149,-1000, 505,-1000,-1000,-1000,
  405. -1000,-1000,1052,-1000,1052, 443,-1000,1052,-1000, 301,
  406. -1000, 722, 528,-1000,1052,-1000,-1000,-1000,1052,1052,
  407. -1000, 722,-1000,1052,-1000,-1000,  65, 528,-1000, 511,
  408.  275,-1000,1280,-1000,-1000,-1000, 917,-1000,1280,1280,
  409. 1280,1280,1280, -40, 309, 136, 409,-1000,-1000, 409,
  410.  409,-1000, 217, 204, 190, 722,-1000,1138,-1000,-1000,
  411. -1000,-1000,-1000,   2,-1000,-1000, 358,-1000,-1000, 381,
  412. -1000,-1000, 246,-1000,-1000,-1000,   7,-1000, -24,1270,
  413.  505,-1000, 242,-1000,  64,-1000,-1000, 401, 508,-1000,
  414.  505,-1000,-1000, 241,-1000, 290,-1000,-1000,-1000, 344,
  415.  289, 705, 722,1014,-1000, 722, 339, 206, 170, 722,
  416.  505, 677,-1000,1003,1052,1052,1052,1052,1052,1052,
  417. 1052,1052,1052,1052,-1000,-1000,-1000,-1000,-1000,-1000,
  418. -1000, 630, 161, -43, 583, 608, 343, 218,-1000,-1000,
  419. -1000,1160, 205, 722,-1000,-1000,  50, -40, -40, -40,
  420.  323,-1000, 409, 136, 153, 136,1138,1138,1138, 566,
  421.  135, 130,  78,-1000,-1000,-1000, 200,-1000,  26,-1000,
  422.  342,-1000,  42,-1000, 191, 966,-1000,1270,-1000,-1000,
  423.   17, 823,-1000,-1000,-1000,1052,-1000,-1000, 505,-1000,
  424.  401,  76, 177,-1000,  19,-1000,  74,-1000,-1000, 505,
  425. 1052,  65,1052,1052, 447,-1000, 335, 303,1052,1052,
  426. -1000, 528,-1000,  44, -43, -43, -43, 111,  94,  94,
  427.  647, 583,  83,-1000,1052,-1000, 528, 528,  65,-1000,
  428.    2,-1000,-1000, 409,-1000,-1000,-1000,-1000,-1000,-1000,
  429. -1000,1138,1138,1138,-1000, 515, 510,   7,-1000,-1000,
  430.  966,-1000,-1000, -22,-1000,-1000,1270,-1000,-1000,-1000,
  431. -1000, 401,-1000, 508, 508, 505,-1000, 722,  24,  23,
  432.   63, 722,-1000,-1000,-1000,1052, 325, 722,  61, 321,
  433.   75,-1000,1052, 324, 307, 321, 320, 312, 311,-1000,
  434. -1000,-1000,-1000, 966,-1000,-1000,  13, 310,-1000,-1000,
  435. -1000,-1000,-1000,1052,-1000,-1000, 528,-1000,-1000, 722,
  436. -1000,-1000,-1000,-1000,-1000, 722,-1000,-1000, 722,  35,
  437.  528,-1000 };
  438. yytabelem yypgo[]={
  439.  
  440.    0, 637, 631,  13, 630,  81,  15,  30, 629, 628,
  441.  627,  10,   0, 625, 624, 623,  14, 622,   9,  26,
  442.  621, 620, 619,   3,   4, 618,  68, 617, 615,  31,
  443.   39,  35,  25, 101,  18, 614,  50, 373,   1, 292,
  444.   17, 347, 254,   2,  19,  24,  23,  49,  46, 613,
  445.  612,  40,  32,  43, 611, 605, 604, 603, 602,1054,
  446.  121, 601, 599,  12, 598, 597, 589, 588, 585, 584,
  447.  582,  53, 581,  27, 580,  22,  42,   7,  37,   6,
  448.   36, 579,  21, 576, 574,  11,  29,  34, 573, 572,
  449.    8,  16,  33, 571, 569, 568,   5, 567, 518, 566,
  450.  562, 561, 560, 559, 558, 429, 556, 553, 551, 550,
  451.  549, 548,  90, 542, 541,  20 };
  452. yytabelem yyr1[]={
  453.  
  454.    0,   1,   1,  55,  55,  55,  55,  55,  55,  55,
  455.    2,  56,  56,  56,  56,  56,  56,  56,  60,  52,
  456.   33,  53,  53,  61,  61,  62,  62,  63,  63,  26,
  457.   26,  26,  27,  27,  34,  34,  17,  57,  57,  57,
  458.   57,  57,  57,  57,  57,  57,  57,  57,  57,  10,
  459.   10,  10,  74,   7,   8,   9,   9,   9,   9,   9,
  460.    9,   9,   9,   9,   9,   9,   9,  16,  16,  16,
  461.   50,  50,  50,  50,  51,  51,  64,  64,  65,  65,
  462.   66,  66,  80,  54,  54,  67,  67,  81,  82,  76,
  463.   83,  84,  77,  77,  85,  85,  45,  45,  45,  70,
  464.   70,  86,  86,  72,  72,  87,  36,  18,  18,  19,
  465.   19,  75,  75,  89,  88,  88,  90,  90,  43,  43,
  466.   91,  91,   3,  68,  68,  92,  92,  95,  93,  94,
  467.   94,  96,  96,  11,  69,  69,  97,  20,  20,  71,
  468.   21,  21,  22,  22,  38,  38,  38,  39,  39,  39,
  469.   39,  39,  39,  39,  39,  39,  39,  39,  39,  39,
  470.   39,  12,  12,  13,  13,  13,  13,  13,  13,  37,
  471.   37,  37,  37,  32,  40,  40,  44,  44,  48,  48,
  472.   48,  48,  48,  48,  48,  47,  49,  49,  49,  41,
  473.   41,  42,  42,  42,  42,  42,  42,  42,  42,  58,
  474.   58,  58,  58,  58,  58,  58,  58,  58,  99,  23,
  475.   24,  24,  98,  98,  98,  98,  98,  98,  98,  98,
  476.   98,  98,  98,   4, 100, 101, 101, 101, 101,  73,
  477.   73,  35,  25,  25,  46,  46,  14,  14,  28,  28,
  478.   59,  78,  79, 102, 103, 103, 103, 103, 103, 103,
  479.  103, 103, 103, 103, 103, 103, 103, 103, 104, 111,
  480.  111, 111, 106, 113, 113, 113, 108, 108, 105, 105,
  481.  114, 114, 115, 115, 115, 115, 115, 115,  15, 107,
  482.  109, 110, 110,  29,  29,   6,   6,  30,  30,  30,
  483.   31,  31,  31,  31,  31,  31,   5,   5,   5,   5,
  484.    5, 112 };
  485. yytabelem yyr2[]={
  486.  
  487.    0,   0,   3,   2,   2,   2,   3,   3,   2,   1,
  488.    1,   3,   4,   3,   4,   4,   5,   3,   0,   1,
  489.    1,   0,   1,   2,   3,   1,   3,   1,   3,   0,
  490.    2,   3,   1,   3,   1,   1,   1,   1,   1,   1,
  491.    1,   1,   1,   1,   1,   1,   2,   1,   5,   7,
  492.    5,   5,   0,   2,   1,   1,   1,   1,   1,   1,
  493.    1,   1,   1,   1,   1,   1,   1,   0,   4,   6,
  494.    3,   4,   5,   3,   1,   3,   3,   3,   3,   3,
  495.    3,   3,   3,   1,   3,   3,   3,   0,   6,   0,
  496.    0,   0,   2,   3,   1,   3,   1,   2,   1,   1,
  497.    3,   1,   1,   1,   3,   3,   2,   1,   5,   1,
  498.    3,   0,   3,   0,   2,   3,   1,   3,   1,   1,
  499.    1,   3,   1,   3,   3,   4,   1,   0,   2,   1,
  500.    3,   1,   3,   1,   1,   2,   4,   1,   3,   0,
  501.    0,   1,   1,   3,   1,   3,   1,   1,   1,   3,
  502.    3,   3,   3,   2,   3,   3,   3,   3,   3,   2,
  503.    3,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  504.    2,   4,   5,   5,   0,   1,   1,   1,   1,   1,
  505.    1,   1,   1,   1,   1,   5,   1,   1,   1,   1,
  506.    3,   1,   1,   3,   3,   3,   3,   2,   3,   1,
  507.    7,   4,   1,   2,   2,   6,   2,   2,   5,   3,
  508.    1,   4,   4,   5,   2,   1,   1,  10,   1,   3,
  509.    4,   3,   3,   1,   1,   3,   3,   7,   7,   0,
  510.    1,   3,   1,   3,   1,   2,   1,   1,   1,   3,
  511.    0,   0,   0,   1,   2,   2,   2,   2,   2,   2,
  512.    2,   3,   4,   4,   2,   3,   1,   3,   3,   1,
  513.    1,   1,   3,   1,   1,   1,   1,   1,   3,   3,
  514.    1,   3,   1,   1,   1,   2,   2,   2,   1,   3,
  515.    3,   4,   4,   1,   3,   1,   5,   1,   1,   1,
  516.    3,   3,   3,   3,   3,   3,   1,   3,   5,   5,
  517.    5,   0 };
  518. yytabelem yychk[]={
  519.  
  520. -1000,  -1, -55,  -2, 256,   3,   1, -56, -57, -58,
  521.   18,  37,   4,  60,  23,  69,  44,  -7,  40, -10,
  522.  -50, -64, -65, -66, -67, -68, -69,  66,  43,  57,
  523.  -98,  33,  97, -99,  36,  35,  39,  -8,  27,  42,
  524.   53,  41,  30,  50,  55,-100,  20,  29,-101,-102,
  525.   48, -35,  64, -14,  49,  -9,  19,  45,  46,  47,
  526. -103,  24,  58,  68,  52,  63,  28,  34,  31,  54,
  527.   25,  72,  32,  21,  67, 100,-104,-106,-107,-109,
  528. -110,-111,-113,  62,  73,  59,  22,  65,  38,  51,
  529.   56,  26, -17,   5, -59, -60, -60, -60, -60,  44,
  530.  -73,  78, -52, -33,  14,  78,  99, -73,  78,  78,
  531.   78,  78, -73,  78, -97,  83, -70, -86, -33, -51,
  532.   85,  83, -71, -59, -98,  70, -59, -59, -59, -16,
  533.   82, -71, -71, -71, -71, -81, -71, -37, -33, -59,
  534.  -59, -59,  74, -59, -59, -59, -59, -59, -59, -59,
  535. -105, -42,  82,  84,  74, -37, -48, -41, -12,  12,
  536.   13,   5,   6,   7,   8, -49,  80,  81,  11,  10,
  537.    9,-105,  74,-105,-108, -42,  82,-105,  78, -59,
  538.  -59, -59, -59, -59, -53, -52, -53, -52, -52, -60,
  539.  -33, -26,  74, -33, -76, -51, -36, -33, -33, -33,
  540.  -80,  74, -82, -76, -92, -93, -95, -33,  78,  14,
  541.   74, -78, -73,  74, -78, -36, -51, -33, -33, -80,
  542.  -82, -92,  76, -32,  74,  -4,   6,  74,  75, -25,
  543.  -46, -38,  82, -39,  74, -47, -37, -48, -12,  90,
  544.  -40, -38, -40,  74,  -3,   6, -33,  74, -33, -41,
  545. -114, -42,  74,-115,  82,  84, -15,  15, -12,  82,
  546.   83,  84,  85, -41, -41, -29,  78,  -6, -37,  74,
  547.   78, -30, -39,  -5, -31, -38, -47,  74, -30,-112,
  548. -112,-112,-112, -41,  82, -61,  74, -26, -26, -52,
  549.  -71,  75, -27, -34, -33,  82, -75,  74, -77, -84,
  550.  -73, -75, -54, -37, -19, -18, -37,  74,  74,  -7,
  551.   83, -86,  83, -72, -87, -33,  -3, -24, -23,  98,
  552.  -33, -38, -38,  74, -36, -38, -21, -40, -22, -38,
  553.   71, -38,  75,  78, -12,  82,  83,  84, -13,  89,
  554.   88,  87,  86,  85,  91,  93,  92,  95,  94,  96,
  555.   -3, -38, -39, -38, -38, -38, -73, -91,  -3,  75,
  556.   75,  78, -41, -38,  82,  84, -41, -41, -41, -41,
  557.  -41,  75,  78, -29, -29, -29,  78,  78,  78, -38,
  558.  -39,  -5, -31,-112,-112,  75, -62, -63,  14, -26,
  559.  -74,  75,  78, -16, -88, -89,  99,  78, -85, -45,
  560.  -44, -12, -47, -33, -48,  74, -36,  75,  78,  83,
  561.   78, -19, -94, -96, -11,  14, -20, -33,  75,  78,
  562.   76, -79,  74,  76,  75, -79,  82,  75,  77,  78,
  563.  -33,  75, -46, -38, -38, -38, -38, -38, -38, -38,
  564.  -38, -38, -38,  75,  78,  75,  74,  78,  75,-115,
  565.  -41,  75,  -6,  78, -39,  -5, -39,  -5, -39,  -5,
  566.   75,  78,  78,  78,  75,  78,  76, -75, -34,  75,
  567.   78, -90, -43, -38,  82, -85,  82, -44, -37, -83,
  568.  -18,  78,  75,  78,  81,  78, -87, -38, -73, -38,
  569.  -28, -38,  70,  75, -32,  74, -40, -38,  -3, -39,
  570.  -91,  -3, -73, -23, -33, -39, -23, -23, -23, -63,
  571.   14, -16, -90,  77, -45, -44, -77, -23, -96, -11,
  572.  -33, -24,  75,  78, -79,  75,  78,  75,  75, -38,
  573.   75,  75,  75,  75, -43, -38,  83,  75, -38,  -3,
  574.   78,  -3 };
  575. yytabelem yydef[]={
  576.  
  577.    1,  -2,   0,   0,   9,  10,   2,   3,   4,   5,
  578.    0, 240,   8,  18,  18,  18,  18, 229,   0,  37,
  579.   -2,  39,  40,  41,  -2,  43,  44,  45,  47, 139,
  580.  199, 240, 202,   0, 240, 240, 240,  67, 139, 139,
  581.  139, 139,  87, 139, 134,   0, 240, 240, 215, 216,
  582.  240, 218, 240, 240, 240,  54, 224, 240, 240, 240,
  583.  243, 240, 236, 237,  55,  56,  57,  58,  59,  60,
  584.   61,  62,  63,  64,  65,  66,   0,   0,   0,   0,
  585.  256, 240, 240, 240, 240, 240, 259, 260, 261, 263,
  586.  264, 265,   6,  36,   7,  21,  21,   0,   0,  18,
  587.    0, 230,  29,  19,  20,   0,  89,   0, 230,   0,
  588.    0,   0,  89, 127, 135,   0,  46,  99, 101, 102,
  589.   74,   0,   0,  -2, 203, 204,   0, 206, 207,  53,
  590.  241,   0,   0,   0,   0,  89, 127,   0, 169,   0,
  591.  214,   0,   0, 174, 174,   0,   0,   0,   0,   0,
  592.  244,  -2, 246, 247,   0, 191, 192,   0,   0, 178,
  593.  179, 180, 181, 182, 183, 184, 161, 162, 186, 187,
  594.  188, 248,   0, 249, 250,  -2, 267, 254,   0, 301,
  595.  301, 301, 301,   0,  11,  22,  13,  29,  29,   0,
  596.  139,  17,   0, 111,  91, 229,  73, 111,  77,  79,
  597.   81,   0,  86,   0, 124, 126,   0,   0,   0,   0,
  598.    0,   0,   0,   0,   0,  70,   0,  76,  78,  80,
  599.   85, 123,   0, 170,  -2,   0, 223,   0, 219,   0,
  600.  232, 234,   0, 144,   0, 146, 147, 148,   0,   0,
  601.  221, 175, 222,   0, 225, 122,  -2,   0, 231, 272,
  602.    0, 189,   0, 270, 273, 274,   0, 278,   0,   0,
  603.    0,   0,   0, 197, 272, 251,   0, 283, 285,   0,
  604.    0, 255,  -2, 288, 289,   0,  -2,   0, 257, 258,
  605.  262, 279, 280, 301, 301,  12,   0,  14,  15,  29,
  606.   52,  30,   0,  32,  34,  35,  67, 113,   0,   0,
  607.    0, 106,   0,  83,   0, 109, 107,   0,   0, 128,
  608.    0, 100,  75,   0, 103,   0, 242, 201, 210,   0,
  609.    0,   0, 242,   0,  71, 212,   0,   0, 141,  -2,
  610.    0,   0, 220,   0,   0,   0,   0,   0,   0,   0,
  611.    0,   0,   0,   0, 163, 164, 165, 166, 167, 168,
  612.  235,   0, 144, 153, 159,   0,   0,   0, 120,  -2,
  613.  269,   0,   0, 275, 276, 277, 193, 194, 195, 196,
  614.  198, 268,   0, 253,   0, 252,   0,   0,   0,   0,
  615.  144,   0,   0, 281, 282,  23,   0,  25,  27,  16,
  616.  111,  31,   0,  50,   0,   0,  51,   0,  92,  94,
  617.   96,   0,  98, 176, 177,   0,  72,  82,   0,  90,
  618.    0,   0,   0, 129, 131, 133, 136, 137,  48,   0,
  619.    0, 229,   0,   0,   0,  68,   0, 171, 174,   0,
  620.  213,   0, 233, 149, 150, 151, 152,  -2, 155, 156,
  621.  157, 158, 160, 145,   0, 208,   0,   0, 229, 271,
  622.  272, 190, 284,   0,  -2, 291,  -2, 293,  -2, 295,
  623.   -2,   0,   0,   0,  24,   0,   0,  67,  33, 112,
  624.    0, 114, 116, 119, 118,  93,   0,  97,  84,  91,
  625.  110,   0, 125,   0,   0,   0, 104, 105,   0,   0,
  626.  209, 238, 205, 242, 172, 174,   0, 143,   0, 144,
  627.    0, 121,   0,   0, 169,  -2,   0,   0,   0,  26,
  628.   28,  49, 115,   0,  95,  96,   0,   0, 130, 132,
  629.  138, 200, 211,   0,  69, 173,   0, 185, 227, 228,
  630.  286, 298, 299, 300, 117, 119,  88, 108, 239,   0,
  631.    0, 217 };
  632. # ifdef YYDEBUG
  633. # include "y.debug"
  634. # endif
  635.  
  636. # define YYFLAG -1000
  637. # define YYERROR goto yyerrlab
  638. # define YYACCEPT return(0)
  639. # define YYABORT return(1)
  640.  
  641. /*    parser for yacc output    */
  642.  
  643. #ifdef YYDEBUG
  644. int yydebug = 0; /* 1 for debugging */
  645. #endif
  646. YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
  647. int yychar = -1; /* current input token number */
  648. int yynerrs = 0;  /* number of errors */
  649. yytabelem yyerrflag = 0;  /* error recovery flag */
  650.  
  651. yyparse()
  652. {    yytabelem yys[YYMAXDEPTH];
  653.     int yyj, yym;
  654.     register YYSTYPE *yypvt;
  655.     register int yystate, yyn;
  656.     register yytabelem *yyps;
  657.     register YYSTYPE *yypv;
  658.     register yytabelem *yyxi;
  659.  
  660.     yystate = 0;
  661.     yychar = -1;
  662.     yynerrs = 0;
  663.     yyerrflag = 0;
  664.     yyps= &yys[-1];
  665.     yypv= &yyv[-1];
  666.  
  667. yystack:    /* put a state and value onto the stack */
  668. #ifdef YYDEBUG
  669.     if(yydebug >= 3)
  670.         if(yychar < 0 || yytoknames[yychar] == 0)
  671.             printf("char %d in %s", yychar, yystates[yystate]);
  672.         else
  673.             printf("%s in %s", yytoknames[yychar], yystates[yystate]);
  674. #endif
  675.     if( ++yyps >= &yys[YYMAXDEPTH] ) {
  676.         yyerror( "yacc stack overflow" );
  677.         return(1);
  678.     }
  679.     *yyps = yystate;
  680.     ++yypv;
  681.     *yypv = yyval;
  682. yynewstate:
  683.     yyn = yypact[yystate];
  684.     if(yyn <= YYFLAG) goto yydefault; /* simple state */
  685.     if(yychar<0) {
  686.         yychar = yylex();
  687. #ifdef YYDEBUG
  688.         if(yydebug >= 2) {
  689.             if(yychar <= 0)
  690.                 printf("lex EOF\n");
  691.             else if(yytoknames[yychar])
  692.                 printf("lex %s\n", yytoknames[yychar]);
  693.             else
  694.                 printf("lex (%c)\n", yychar);
  695.         }
  696. #endif
  697.         if(yychar < 0)
  698.             yychar = 0;
  699.     }
  700.     if((yyn += yychar) < 0 || yyn >= YYLAST)
  701.         goto yydefault;
  702.     if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
  703.         yychar = -1;
  704.         yyval = yylval;
  705.         yystate = yyn;
  706.         if( yyerrflag > 0 ) --yyerrflag;
  707.         goto yystack;
  708.     }
  709. yydefault:
  710.     /* default state action */
  711.     if( (yyn=yydef[yystate]) == -2 ) {
  712.         if(yychar < 0) {
  713.             yychar = yylex();
  714. #ifdef YYDEBUG
  715.             if(yydebug >= 2)
  716.                 if(yychar < 0)
  717.                     printf("lex EOF\n");
  718.                 else
  719.                     printf("lex %s\n", yytoknames[yychar]);
  720. #endif
  721.             if(yychar < 0)
  722.                 yychar = 0;
  723.         }
  724.         /* look through exception table */
  725.         for(yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate);
  726.             yyxi += 2 ) ; /* VOID */
  727.         while( *(yyxi+=2) >= 0 ){
  728.             if( *yyxi == yychar ) break;
  729.         }
  730.         if( (yyn = yyxi[1]) < 0 ) return(0);   /* accept */
  731.     }
  732.     if( yyn == 0 ){ /* error */
  733.         /* error ... attempt to resume parsing */
  734.         switch( yyerrflag ){
  735.         case 0:   /* brand new error */
  736. #ifdef YYDEBUG
  737.             yyerror("syntax error\n%s", yystates[yystate]);
  738.             if(yytoknames[yychar])
  739.                 yyerror("saw %s\n", yytoknames[yychar]);
  740.             else if(yychar >= ' ' && yychar < '\177')
  741.                 yyerror("saw `%c'\n", yychar);
  742.             else if(yychar == 0)
  743.                 yyerror("saw EOF\n");
  744.             else
  745.                 yyerror("saw char 0%o\n", yychar);
  746. #else
  747.             yyerror( "syntax error" );
  748. #endif
  749. yyerrlab:
  750.             ++yynerrs;
  751.         case 1:
  752.         case 2: /* incompletely recovered error ... try again */
  753.             yyerrflag = 3;
  754.             /* find a state where "error" is a legal shift action */
  755.             while ( yyps >= yys ) {
  756.                 yyn = yypact[*yyps] + YYERRCODE;
  757.                 if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
  758.                     yystate = yyact[yyn];  /* simulate a shift of "error" */
  759.                     goto yystack;
  760.                 }
  761.                 yyn = yypact[*yyps];
  762.                 /* the current yyps has no shift onn "error", pop stack */
  763. #ifdef YYDEBUG
  764.                 if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
  765. #endif
  766.                 --yyps;
  767.                 --yypv;
  768.             }
  769.             /* there is no state on the stack with an error shift ... abort */
  770. yyabort:
  771.             return(1);
  772.         case 3:  /* no shift yet; clobber input char */
  773. #ifdef YYDEBUG
  774.             if( yydebug ) {
  775.                 printf("error recovery discards ");
  776.                 if(yytoknames[yychar])
  777.                     printf("%s\n", yytoknames[yychar]);
  778.                 else if(yychar >= ' ' && yychar < '\177')
  779.                     printf("`%c'\n", yychar);
  780.                 else if(yychar == 0)
  781.                     printf("EOF\n");
  782.                 else
  783.                     printf("char 0%o\n", yychar);
  784.             }
  785. #endif
  786.             if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
  787.             yychar = -1;
  788.             goto yynewstate;   /* try again in the same state */
  789.         }
  790.     }
  791.     /* reduction by production yyn */
  792. #ifdef YYDEBUG
  793.     if(yydebug) {    char *s;
  794.         printf("reduce %d in:\n\t", yyn);
  795.         for(s = yystates[yystate]; *s; s++) {
  796.             putchar(*s);
  797.             if(*s == '\n' && *(s+1))
  798.                 putchar('\t');
  799.         }
  800.     }
  801. #endif
  802.     yyps -= yyr2[yyn];
  803.     yypvt = yypv;
  804.     yypv -= yyr2[yyn];
  805.     yyval = yypv[1];
  806.     yym=yyn;
  807.     /* consult goto table to find next state */
  808.     yyn = yyr1[yyn];
  809.     yyj = yypgo[yyn] + *yyps + 1;
  810.     if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
  811.     switch(yym){
  812.  
  813. case 3:
  814. /* # line 218 "gram.in" */
  815. {
  816. /* stat:   is the nonterminal for Fortran statements */
  817.  
  818.           lastwasbranch = NO; } break;
  819. case 5:
  820. /* # line 224 "gram.in" */
  821. { /* forbid further statement function definitions... */
  822.           if (parstate == INDATA && laststfcn != thisstno)
  823.             parstate = INEXEC;
  824.           thisstno++;
  825.           if(yypvt[-1].labval && (yypvt[-1].labval->labelno==dorange))
  826.             enddo(yypvt[-1].labval->labelno);
  827.           if(lastwasbranch && thislabel==NULL)
  828.             warn("statement cannot be reached");
  829.           lastwasbranch = thiswasbranch;
  830.           thiswasbranch = NO;
  831.           if(yypvt[-1].labval)
  832.             {
  833.             if(yypvt[-1].labval->labtype == LABFORMAT)
  834.                 err("label already that of a format");
  835.             else
  836.                 yypvt[-1].labval->labtype = LABEXEC;
  837.             }
  838.           freetemps();
  839.         } break;
  840. case 6:
  841. /* # line 244 "gram.in" */
  842. { if (can_include)
  843.             doinclude( yypvt[-0].charpval );
  844.           else {
  845.             fprintf(diagfile, "Cannot open file %s\n", yypvt[-0].charpval);
  846.             done(1);
  847.             }
  848.         } break;
  849. case 7:
  850. /* # line 252 "gram.in" */
  851. { if (yypvt[-2].labval)
  852.             lastwasbranch = NO;
  853.           endproc(); /* lastwasbranch = NO; -- set in endproc() */
  854.         } break;
  855. case 8:
  856. /* # line 257 "gram.in" */
  857. { unclassifiable();
  858.  
  859. /* flline flushes the current line, ignoring the rest of the text there */
  860.  
  861.           flline(); } break;
  862. case 9:
  863. /* # line 263 "gram.in" */
  864. { flline();  needkwd = NO;  inioctl = NO;
  865.           yyerrok; yyclearin; } break;
  866. case 10:
  867. /* # line 268 "gram.in" */
  868. {
  869.         if(yystno != 0)
  870.             {
  871.             yyval.labval = thislabel =  mklabel(yystno);
  872.             if( ! headerdone ) {
  873.                 if (procclass == CLUNKNOWN)
  874.                     procclass = CLMAIN;
  875.                 puthead(CNULL, procclass);
  876.                 }
  877.             if(thislabel->labdefined)
  878.                 execerr("label %s already defined",
  879.                     convic(thislabel->stateno) );
  880.             else    {
  881.                 if(thislabel->blklevel!=0 && thislabel->blklevel<blklevel
  882.                     && thislabel->labtype!=LABFORMAT)
  883.                     warn1("there is a branch to label %s from outside block",
  884.                           convic( (ftnint) (thislabel->stateno) ) );
  885.                 thislabel->blklevel = blklevel;
  886.                 thislabel->labdefined = YES;
  887.                 if(thislabel->labtype != LABFORMAT)
  888.                     p1_label((long)(thislabel - labeltab));
  889.                 }
  890.             }
  891.         else    yyval.labval = thislabel = NULL;
  892.         } break;
  893. case 11:
  894. /* # line 296 "gram.in" */
  895. {startproc(yypvt[-0].extval, CLMAIN); } break;
  896. case 12:
  897. /* # line 298 "gram.in" */
  898. {    warn("ignoring arguments to main program");
  899.             /* hashclear(); */
  900.             startproc(yypvt[-1].extval, CLMAIN); } break;
  901. case 13:
  902. /* # line 302 "gram.in" */
  903. { if(yypvt[-0].extval) NO66("named BLOCKDATA");
  904.           startproc(yypvt[-0].extval, CLBLOCK); } break;
  905. case 14:
  906. /* # line 305 "gram.in" */
  907. { entrypt(CLPROC, TYSUBR, (ftnint) 0,  yypvt[-1].extval, yypvt[-0].chval); } break;
  908. case 15:
  909. /* # line 307 "gram.in" */
  910. { entrypt(CLPROC, TYUNKNOWN, (ftnint) 0, yypvt[-1].extval, yypvt[-0].chval); } break;
  911. case 16:
  912. /* # line 309 "gram.in" */
  913. { entrypt(CLPROC, yypvt[-4].ival, varleng, yypvt[-1].extval, yypvt[-0].chval); } break;
  914. case 17:
  915. /* # line 311 "gram.in" */
  916. { if(parstate==OUTSIDE || procclass==CLMAIN
  917.             || procclass==CLBLOCK)
  918.                 execerr("misplaced entry statement", CNULL);
  919.           entrypt(CLENTRY, 0, (ftnint) 0, yypvt[-1].extval, yypvt[-0].chval);
  920.         } break;
  921. case 18:
  922. /* # line 319 "gram.in" */
  923. { newproc(); } break;
  924. case 19:
  925. /* # line 323 "gram.in" */
  926. { yyval.extval = newentry(yypvt[-0].namval, 1); } break;
  927. case 20:
  928. /* # line 327 "gram.in" */
  929. { yyval.namval = mkname(token); } break;
  930. case 21:
  931. /* # line 330 "gram.in" */
  932. { yyval.extval = NULL; } break;
  933. case 29:
  934. /* # line 348 "gram.in" */
  935. { yyval.chval = 0; } break;
  936. case 30:
  937. /* # line 350 "gram.in" */
  938. { NO66(" () argument list");
  939.           yyval.chval = 0; } break;
  940. case 31:
  941. /* # line 353 "gram.in" */
  942. {yyval.chval = yypvt[-1].chval; } break;
  943. case 32:
  944. /* # line 357 "gram.in" */
  945. { yyval.chval = (yypvt[-0].namval ? mkchain((char *)yypvt[-0].namval,CHNULL) : CHNULL ); } break;
  946. case 33:
  947. /* # line 359 "gram.in" */
  948. { if(yypvt[-0].namval) yypvt[-2].chval = yyval.chval = mkchain((char *)yypvt[-0].namval, yypvt[-2].chval); } break;
  949. case 34:
  950. /* # line 363 "gram.in" */
  951. { if(yypvt[-0].namval->vstg!=STGUNKNOWN && yypvt[-0].namval->vstg!=STGARG)
  952.             dclerr("name declared as argument after use", yypvt[-0].namval);
  953.           yypvt[-0].namval->vstg = STGARG;
  954.         } break;
  955. case 35:
  956. /* # line 368 "gram.in" */
  957. { NO66("altenate return argument");
  958.  
  959. /* substars   means that '*'ed formal parameters should be replaced.
  960.    This is used to specify alternate return labels; in theory, only
  961.    parameter slots which have '*' should accept the statement labels.
  962.    This compiler chooses to ignore the '*'s in the formal declaration, and
  963.    always return the proper value anyway.
  964.  
  965.    This variable is only referred to in   proc.c   */
  966.  
  967.           yyval.namval = 0;  substars = YES; } break;
  968. case 36:
  969. /* # line 384 "gram.in" */
  970. {
  971.         char *s;
  972.         s = copyn(toklen+1, token);
  973.         s[toklen] = '\0';
  974.         yyval.charpval = s;
  975.         } break;
  976. case 45:
  977. /* # line 400 "gram.in" */
  978. { NO66("SAVE statement");
  979.           saveall = YES; } break;
  980. case 46:
  981. /* # line 403 "gram.in" */
  982. { NO66("SAVE statement"); } break;
  983. case 47:
  984. /* # line 405 "gram.in" */
  985. { fmtstmt(thislabel); setfmt(thislabel); } break;
  986. case 48:
  987. /* # line 407 "gram.in" */
  988. { NO66("PARAMETER statement"); } break;
  989. case 49:
  990. /* # line 411 "gram.in" */
  991. { settype(yypvt[-4].namval, yypvt[-6].ival, yypvt[-0].lval);
  992.           if(ndim>0) setbound(yypvt[-4].namval,ndim,dims);
  993.         } break;
  994. case 50:
  995. /* # line 415 "gram.in" */
  996. { settype(yypvt[-2].namval, yypvt[-4].ival, yypvt[-0].lval);
  997.           if(ndim>0) setbound(yypvt[-2].namval,ndim,dims);
  998.         } break;
  999. case 51:
  1000. /* # line 419 "gram.in" */
  1001. { if (new_dcl == 2) {
  1002.             err("attempt to give DATA in type-declaration");
  1003.             new_dcl = 1;
  1004.             }
  1005.         } break;
  1006. case 52:
  1007. /* # line 426 "gram.in" */
  1008. { new_dcl = 2; } break;
  1009. case 53:
  1010. /* # line 429 "gram.in" */
  1011. { varleng = yypvt[-0].lval; } break;
  1012. case 54:
  1013. /* # line 433 "gram.in" */
  1014. { varleng = (yypvt[-0].ival<0 || ONEOF(yypvt[-0].ival,M(TYLOGICAL)|M(TYLONG))
  1015.                 ? 0 : typesize[yypvt[-0].ival]);
  1016.           vartype = yypvt[-0].ival; } break;
  1017. case 55:
  1018. /* # line 438 "gram.in" */
  1019. { yyval.ival = TYLONG; } break;
  1020. case 56:
  1021. /* # line 439 "gram.in" */
  1022. { yyval.ival = tyreal; } break;
  1023. case 57:
  1024. /* # line 440 "gram.in" */
  1025. { ++complex_seen; yyval.ival = tycomplex; } break;
  1026. case 58:
  1027. /* # line 441 "gram.in" */
  1028. { yyval.ival = TYDREAL; } break;
  1029. case 59:
  1030. /* # line 442 "gram.in" */
  1031. { ++dcomplex_seen; NOEXT("DOUBLE COMPLEX statement"); yyval.ival = TYDCOMPLEX; } break;
  1032. case 60:
  1033. /* # line 443 "gram.in" */
  1034. { yyval.ival = TYLOGICAL; } break;
  1035. case 61:
  1036. /* # line 444 "gram.in" */
  1037. { NO66("CHARACTER statement"); yyval.ival = TYCHAR; } break;
  1038. case 62:
  1039. /* # line 445 "gram.in" */
  1040. { yyval.ival = TYUNKNOWN; } break;
  1041. case 63:
  1042. /* # line 446 "gram.in" */
  1043. { yyval.ival = TYUNKNOWN; } break;
  1044. case 64:
  1045. /* # line 447 "gram.in" */
  1046. { NOEXT("AUTOMATIC statement"); yyval.ival = - STGAUTO; } break;
  1047. case 65:
  1048. /* # line 448 "gram.in" */
  1049. { NOEXT("STATIC statement"); yyval.ival = - STGBSS; } break;
  1050. case 66:
  1051. /* # line 449 "gram.in" */
  1052. { yyval.ival = TYINT1; } break;
  1053. case 67:
  1054. /* # line 453 "gram.in" */
  1055. { yyval.lval = varleng; } break;
  1056. case 68:
  1057. /* # line 455 "gram.in" */
  1058. {
  1059.         expptr p;
  1060.         p = yypvt[-1].expval;
  1061.         NO66("length specification *n");
  1062.         if( ! ISICON(p) || p->constblock.Const.ci <= 0 )
  1063.             {
  1064.             yyval.lval = 0;
  1065.             dclerr("length must be a positive integer constant",
  1066.                 NPNULL);
  1067.             }
  1068.         else {
  1069.             if (vartype == TYCHAR)
  1070.                 yyval.lval = p->constblock.Const.ci;
  1071.             else switch((int)p->constblock.Const.ci) {
  1072.                 case 1:    yyval.lval = 1; break;
  1073.                 case 2: yyval.lval = typesize[TYSHORT];    break;
  1074.                 case 4: yyval.lval = typesize[TYLONG];    break;
  1075.                 case 8: yyval.lval = typesize[TYDREAL];    break;
  1076.                 case 16: yyval.lval = typesize[TYDCOMPLEX]; break;
  1077.                 default:
  1078.                     dclerr("invalid length",NPNULL);
  1079.                     yyval.lval = varleng;
  1080.                 }
  1081.             }
  1082.         } break;
  1083. case 69:
  1084. /* # line 481 "gram.in" */
  1085. { NO66("length specification *(*)"); yyval.lval = -1; } break;
  1086. case 70:
  1087. /* # line 485 "gram.in" */
  1088. { incomm( yyval.extval = comblock("") , yypvt[-0].namval ); } break;
  1089. case 71:
  1090. /* # line 487 "gram.in" */
  1091. { yyval.extval = yypvt[-1].extval;  incomm(yypvt[-1].extval, yypvt[-0].namval); } break;
  1092. case 72:
  1093. /* # line 489 "gram.in" */
  1094. { yyval.extval = yypvt[-2].extval;  incomm(yypvt[-2].extval, yypvt[-0].namval); } break;
  1095. case 73:
  1096. /* # line 491 "gram.in" */
  1097. { incomm(yypvt[-2].extval, yypvt[-0].namval); } break;
  1098. case 74:
  1099. /* # line 495 "gram.in" */
  1100. { yyval.extval = comblock(""); } break;
  1101. case 75:
  1102. /* # line 497 "gram.in" */
  1103. { yyval.extval = comblock(token); } break;
  1104. case 76:
  1105. /* # line 501 "gram.in" */
  1106. { setext(yypvt[-0].namval); } break;
  1107. case 77:
  1108. /* # line 503 "gram.in" */
  1109. { setext(yypvt[-0].namval); } break;
  1110. case 78:
  1111. /* # line 507 "gram.in" */
  1112. { NO66("INTRINSIC statement"); setintr(yypvt[-0].namval); } break;
  1113. case 79:
  1114. /* # line 509 "gram.in" */
  1115. { setintr(yypvt[-0].namval); } break;
  1116. case 82:
  1117. /* # line 517 "gram.in" */
  1118. {
  1119.         struct Equivblock *p;
  1120.         if(nequiv >= maxequiv)
  1121.             many("equivalences", 'q', maxequiv);
  1122.         p  =  & eqvclass[nequiv++];
  1123.         p->eqvinit = NO;
  1124.         p->eqvbottom = 0;
  1125.         p->eqvtop = 0;
  1126.         p->equivs = yypvt[-1].eqvval;
  1127.         } break;
  1128. case 83:
  1129. /* # line 530 "gram.in" */
  1130. { yyval.eqvval=ALLOC(Eqvchain);
  1131.           yyval.eqvval->eqvitem.eqvlhs = (struct Primblock *)yypvt[-0].expval;
  1132.         } break;
  1133. case 84:
  1134. /* # line 534 "gram.in" */
  1135. { yyval.eqvval=ALLOC(Eqvchain);
  1136.           yyval.eqvval->eqvitem.eqvlhs = (struct Primblock *) yypvt[-0].expval;
  1137.           yyval.eqvval->eqvnextp = yypvt[-2].eqvval;
  1138.         } break;
  1139. case 87:
  1140. /* # line 545 "gram.in" */
  1141. { if(parstate == OUTSIDE)
  1142.             {
  1143.             newproc();
  1144.             startproc(ESNULL, CLMAIN);
  1145.             }
  1146.           if(parstate < INDATA)
  1147.             {
  1148.             enddcl();
  1149.             parstate = INDATA;
  1150.             datagripe = 1;
  1151.             }
  1152.         } break;
  1153. case 88:
  1154. /* # line 560 "gram.in" */
  1155. { ftnint junk;
  1156.           if(nextdata(&junk) != NULL)
  1157.             err("too few initializers");
  1158.           frdata(yypvt[-4].chval);
  1159.           frrpl();
  1160.         } break;
  1161. case 89:
  1162. /* # line 568 "gram.in" */
  1163. { frchain(&datastack); curdtp = 0; } break;
  1164. case 90:
  1165. /* # line 570 "gram.in" */
  1166. { pop_datastack(); } break;
  1167. case 91:
  1168. /* # line 572 "gram.in" */
  1169. { toomanyinit = NO; } break;
  1170. case 94:
  1171. /* # line 577 "gram.in" */
  1172. { dataval(ENULL, yypvt[-0].expval); } break;
  1173. case 95:
  1174. /* # line 579 "gram.in" */
  1175. { dataval(yypvt[-2].expval, yypvt[-0].expval); } break;
  1176. case 97:
  1177. /* # line 584 "gram.in" */
  1178. { if( yypvt[-1].ival==OPMINUS && ISCONST(yypvt[-0].expval) )
  1179.             consnegop((Constp)yypvt[-0].expval);
  1180.           yyval.expval = yypvt[-0].expval;
  1181.         } break;
  1182. case 101:
  1183. /* # line 596 "gram.in" */
  1184. { int k;
  1185.           yypvt[-0].namval->vsave = YES;
  1186.           k = yypvt[-0].namval->vstg;
  1187.         if( ! ONEOF(k, M(STGUNKNOWN)|M(STGBSS)|M(STGINIT)) )
  1188.             dclerr("can only save static variables", yypvt[-0].namval);
  1189.         } break;
  1190. case 105:
  1191. /* # line 610 "gram.in" */
  1192. { if(yypvt[-2].namval->vclass == CLUNKNOWN)
  1193.             make_param((struct Paramblock *)yypvt[-2].namval, yypvt[-0].expval);
  1194.           else dclerr("cannot make into parameter", yypvt[-2].namval);
  1195.         } break;
  1196. case 106:
  1197. /* # line 617 "gram.in" */
  1198. { if(ndim>0) setbound(yypvt[-1].namval, ndim, dims); } break;
  1199. case 107:
  1200. /* # line 621 "gram.in" */
  1201. { Namep np;
  1202.           np = ( (struct Primblock *) yypvt[-0].expval) -> namep;
  1203.           vardcl(np);
  1204.           if(np->vstg == STGCOMMON)
  1205.             extsymtab[np->vardesc.varno].extinit = YES;
  1206.           else if(np->vstg==STGEQUIV)
  1207.             eqvclass[np->vardesc.varno].eqvinit = YES;
  1208.           else if(np->vstg!=STGINIT && np->vstg!=STGBSS)
  1209.             dclerr("inconsistent storage classes", np);
  1210.           yyval.chval = mkchain((char *)yypvt[-0].expval, CHNULL);
  1211.         } break;
  1212. case 108:
  1213. /* # line 633 "gram.in" */
  1214. { chainp p; struct Impldoblock *q;
  1215.         pop_datastack();
  1216.         q = ALLOC(Impldoblock);
  1217.         q->tag = TIMPLDO;
  1218.         (q->varnp = (Namep) (yypvt[-1].chval->datap))->vimpldovar = 1;
  1219.         p = yypvt[-1].chval->nextp;
  1220.         if(p)  { q->implb = (expptr)(p->datap); p = p->nextp; }
  1221.         if(p)  { q->impub = (expptr)(p->datap); p = p->nextp; }
  1222.         if(p)  { q->impstep = (expptr)(p->datap); }
  1223.         frchain( & (yypvt[-1].chval) );
  1224.         yyval.chval = mkchain((char *)q, CHNULL);
  1225.         q->datalist = hookup(yypvt[-3].chval, yyval.chval);
  1226.         } break;
  1227. case 109:
  1228. /* # line 649 "gram.in" */
  1229. { if (!datastack)
  1230.             curdtp = 0;
  1231.           datastack = mkchain((char *)curdtp, datastack);
  1232.           curdtp = yypvt[-0].chval; curdtelt = 0;
  1233.           } break;
  1234. case 110:
  1235. /* # line 655 "gram.in" */
  1236. { yyval.chval = hookup(yypvt[-2].chval, yypvt[-0].chval); } break;
  1237. case 111:
  1238. /* # line 659 "gram.in" */
  1239. { ndim = 0; } break;
  1240. case 113:
  1241. /* # line 663 "gram.in" */
  1242. { ndim = 0; } break;
  1243. case 116:
  1244. /* # line 668 "gram.in" */
  1245. {
  1246.           if(ndim == maxdim)
  1247.             err("too many dimensions");
  1248.           else if(ndim < maxdim)
  1249.             { dims[ndim].lb = 0;
  1250.               dims[ndim].ub = yypvt[-0].expval;
  1251.             }
  1252.           ++ndim;
  1253.         } break;
  1254. case 117:
  1255. /* # line 678 "gram.in" */
  1256. {
  1257.           if(ndim == maxdim)
  1258.             err("too many dimensions");
  1259.           else if(ndim < maxdim)
  1260.             { dims[ndim].lb = yypvt[-2].expval;
  1261.               dims[ndim].ub = yypvt[-0].expval;
  1262.             }
  1263.           ++ndim;
  1264.         } break;
  1265. case 118:
  1266. /* # line 690 "gram.in" */
  1267. { yyval.expval = 0; } break;
  1268. case 120:
  1269. /* # line 695 "gram.in" */
  1270. { nstars = 1; labarray[0] = yypvt[-0].labval; } break;
  1271. case 121:
  1272. /* # line 697 "gram.in" */
  1273. { if(nstars < maxlablist)  labarray[nstars++] = yypvt[-0].labval; } break;
  1274. case 122:
  1275. /* # line 701 "gram.in" */
  1276. { yyval.labval = execlab( convci(toklen, token) ); } break;
  1277. case 123:
  1278. /* # line 705 "gram.in" */
  1279. { NO66("IMPLICIT statement"); } break;
  1280. case 126:
  1281. /* # line 711 "gram.in" */
  1282. { if (vartype != TYUNKNOWN)
  1283.             dclerr("-- expected letter range",NPNULL);
  1284.           setimpl(vartype, varleng, 'a', 'z'); } break;
  1285. case 127:
  1286. /* # line 716 "gram.in" */
  1287. { needkwd = 1; } break;
  1288. case 131:
  1289. /* # line 725 "gram.in" */
  1290. { setimpl(vartype, varleng, yypvt[-0].ival, yypvt[-0].ival); } break;
  1291. case 132:
  1292. /* # line 727 "gram.in" */
  1293. { setimpl(vartype, varleng, yypvt[-2].ival, yypvt[-0].ival); } break;
  1294. case 133:
  1295. /* # line 731 "gram.in" */
  1296. { if(toklen!=1 || token[0]<'a' || token[0]>'z')
  1297.             {
  1298.             dclerr("implicit item must be single letter", NPNULL);
  1299.             yyval.ival = 0;
  1300.             }
  1301.           else yyval.ival = token[0];
  1302.         } break;
  1303. case 136:
  1304. /* # line 745 "gram.in" */
  1305. {
  1306.         if(yypvt[-2].namval->vclass == CLUNKNOWN)
  1307.             {
  1308.             yypvt[-2].namval->vclass = CLNAMELIST;
  1309.             yypvt[-2].namval->vtype = TYINT;
  1310.             yypvt[-2].namval->vstg = STGBSS;
  1311.             yypvt[-2].namval->varxptr.namelist = yypvt[-0].chval;
  1312.             yypvt[-2].namval->vardesc.varno = ++lastvarno;
  1313.             }
  1314.         else dclerr("cannot be a namelist name", yypvt[-2].namval);
  1315.         } break;
  1316. case 137:
  1317. /* # line 759 "gram.in" */
  1318. { yyval.chval = mkchain((char *)yypvt[-0].namval, CHNULL); } break;
  1319. case 138:
  1320. /* # line 761 "gram.in" */
  1321. { yyval.chval = hookup(yypvt[-2].chval, mkchain((char *)yypvt[-0].namval, CHNULL)); } break;
  1322. case 139:
  1323. /* # line 765 "gram.in" */
  1324. { switch(parstate)
  1325.             {
  1326.             case OUTSIDE:    newproc();
  1327.                     startproc(ESNULL, CLMAIN);
  1328.             case INSIDE:    parstate = INDCL;
  1329.             case INDCL:    break;
  1330.  
  1331.             case INDATA:
  1332.                 if (datagripe) {
  1333.                     errstr(
  1334.                 "Statement order error: declaration after DATA",
  1335.                         CNULL);
  1336.                     datagripe = 0;
  1337.                     }
  1338.                 break;
  1339.  
  1340.             default:
  1341.                 dclerr("declaration among executables", NPNULL);
  1342.             }
  1343.         } break;
  1344. case 140:
  1345. /* # line 787 "gram.in" */
  1346. { yyval.chval = 0; } break;
  1347. case 141:
  1348. /* # line 789 "gram.in" */
  1349. { yyval.chval = revchain(yypvt[-0].chval); } break;
  1350. case 142:
  1351. /* # line 793 "gram.in" */
  1352. { yyval.chval = mkchain((char *)yypvt[-0].expval, CHNULL); } break;
  1353. case 143:
  1354. /* # line 795 "gram.in" */
  1355. { yyval.chval = mkchain((char *)yypvt[-0].expval, yypvt[-2].chval); } break;
  1356. case 145:
  1357. /* # line 800 "gram.in" */
  1358. { yyval.expval = yypvt[-1].expval; if (yyval.expval->tag == TPRIM)
  1359.                     yyval.expval->primblock.parenused = 1; } break;
  1360. case 149:
  1361. /* # line 808 "gram.in" */
  1362. { yyval.expval = mkexpr(yypvt[-1].ival, yypvt[-2].expval, yypvt[-0].expval); } break;
  1363. case 150:
  1364. /* # line 810 "gram.in" */
  1365. { yyval.expval = mkexpr(OPSTAR, yypvt[-2].expval, yypvt[-0].expval); } break;
  1366. case 151:
  1367. /* # line 812 "gram.in" */
  1368. { yyval.expval = mkexpr(OPSLASH, yypvt[-2].expval, yypvt[-0].expval); } break;
  1369. case 152:
  1370. /* # line 814 "gram.in" */
  1371. { yyval.expval = mkexpr(OPPOWER, yypvt[-2].expval, yypvt[-0].expval); } break;
  1372. case 153:
  1373. /* # line 816 "gram.in" */
  1374. { if(yypvt[-1].ival == OPMINUS)
  1375.             yyval.expval = mkexpr(OPNEG, yypvt[-0].expval, ENULL);
  1376.           else     yyval.expval = yypvt[-0].expval;
  1377.         } break;
  1378. case 154:
  1379. /* # line 821 "gram.in" */
  1380. { yyval.expval = mkexpr(yypvt[-1].ival, yypvt[-2].expval, yypvt[-0].expval); } break;
  1381. case 155:
  1382. /* # line 823 "gram.in" */
  1383. { NO66(".EQV. operator");
  1384.           yyval.expval = mkexpr(OPEQV, yypvt[-2].expval,yypvt[-0].expval); } break;
  1385. case 156:
  1386. /* # line 826 "gram.in" */
  1387. { NO66(".NEQV. operator");
  1388.           yyval.expval = mkexpr(OPNEQV, yypvt[-2].expval, yypvt[-0].expval); } break;
  1389. case 157:
  1390. /* # line 829 "gram.in" */
  1391. { yyval.expval = mkexpr(OPOR, yypvt[-2].expval, yypvt[-0].expval); } break;
  1392. case 158:
  1393. /* # line 831 "gram.in" */
  1394. { yyval.expval = mkexpr(OPAND, yypvt[-2].expval, yypvt[-0].expval); } break;
  1395. case 159:
  1396. /* # line 833 "gram.in" */
  1397. { yyval.expval = mkexpr(OPNOT, yypvt[-0].expval, ENULL); } break;
  1398. case 160:
  1399. /* # line 835 "gram.in" */
  1400. { NO66("concatenation operator //");
  1401.           yyval.expval = mkexpr(OPCONCAT, yypvt[-2].expval, yypvt[-0].expval); } break;
  1402. case 161:
  1403. /* # line 839 "gram.in" */
  1404. { yyval.ival = OPPLUS; } break;
  1405. case 162:
  1406. /* # line 840 "gram.in" */
  1407. { yyval.ival = OPMINUS; } break;
  1408. case 163:
  1409. /* # line 843 "gram.in" */
  1410. { yyval.ival = OPEQ; } break;
  1411. case 164:
  1412. /* # line 844 "gram.in" */
  1413. { yyval.ival = OPGT; } break;
  1414. case 165:
  1415. /* # line 845 "gram.in" */
  1416. { yyval.ival = OPLT; } break;
  1417. case 166:
  1418. /* # line 846 "gram.in" */
  1419. { yyval.ival = OPGE; } break;
  1420. case 167:
  1421. /* # line 847 "gram.in" */
  1422. { yyval.ival = OPLE; } break;
  1423. case 168:
  1424. /* # line 848 "gram.in" */
  1425. { yyval.ival = OPNE; } break;
  1426. case 169:
  1427. /* # line 852 "gram.in" */
  1428. { yyval.expval = mkprim(yypvt[-0].namval, LBNULL, CHNULL); } break;
  1429. case 170:
  1430. /* # line 854 "gram.in" */
  1431. { NO66("substring operator :");
  1432.           yyval.expval = mkprim(yypvt[-1].namval, LBNULL, yypvt[-0].chval); } break;
  1433. case 171:
  1434. /* # line 857 "gram.in" */
  1435. { yyval.expval = mkprim(yypvt[-3].namval, mklist(yypvt[-1].chval), CHNULL); } break;
  1436. case 172:
  1437. /* # line 859 "gram.in" */
  1438. { NO66("substring operator :");
  1439.           yyval.expval = mkprim(yypvt[-4].namval, mklist(yypvt[-2].chval), yypvt[-0].chval); } break;
  1440. case 173:
  1441. /* # line 864 "gram.in" */
  1442. { yyval.chval = mkchain((char *)yypvt[-3].expval, mkchain((char *)yypvt[-1].expval,CHNULL)); } break;
  1443. case 174:
  1444. /* # line 868 "gram.in" */
  1445. { yyval.expval = 0; } break;
  1446. case 176:
  1447. /* # line 873 "gram.in" */
  1448. { if(yypvt[-0].namval->vclass == CLPARAM)
  1449.             yyval.expval = (expptr) cpexpr(
  1450.                 ( (struct Paramblock *) (yypvt[-0].namval) ) -> paramval);
  1451.         } break;
  1452. case 178:
  1453. /* # line 880 "gram.in" */
  1454. { yyval.expval = mklogcon(1); } break;
  1455. case 179:
  1456. /* # line 881 "gram.in" */
  1457. { yyval.expval = mklogcon(0); } break;
  1458. case 180:
  1459. /* # line 882 "gram.in" */
  1460. { yyval.expval = mkstrcon(toklen, token); } break;
  1461. case 181:
  1462. /* # line 883 "gram.in" */
  1463.  { yyval.expval = mkintcon( convci(toklen, token) ); } break;
  1464. case 182:
  1465. /* # line 884 "gram.in" */
  1466.  { yyval.expval = mkrealcon(tyreal, token); } break;
  1467. case 183:
  1468. /* # line 885 "gram.in" */
  1469.  { yyval.expval = mkrealcon(TYDREAL, token); } break;
  1470. case 185:
  1471. /* # line 890 "gram.in" */
  1472. { yyval.expval = mkcxcon(yypvt[-3].expval,yypvt[-1].expval); } break;
  1473. case 186:
  1474. /* # line 894 "gram.in" */
  1475. { NOEXT("hex constant");
  1476.           yyval.expval = mkbitcon(4, toklen, token); } break;
  1477. case 187:
  1478. /* # line 897 "gram.in" */
  1479. { NOEXT("octal constant");
  1480.           yyval.expval = mkbitcon(3, toklen, token); } break;
  1481. case 188:
  1482. /* # line 900 "gram.in" */
  1483. { NOEXT("binary constant");
  1484.           yyval.expval = mkbitcon(1, toklen, token); } break;
  1485. case 190:
  1486. /* # line 906 "gram.in" */
  1487. { yyval.expval = yypvt[-1].expval; } break;
  1488. case 193:
  1489. /* # line 912 "gram.in" */
  1490. { yyval.expval = mkexpr(yypvt[-1].ival, yypvt[-2].expval, yypvt[-0].expval); } break;
  1491. case 194:
  1492. /* # line 914 "gram.in" */
  1493. { yyval.expval = mkexpr(OPSTAR, yypvt[-2].expval, yypvt[-0].expval); } break;
  1494. case 195:
  1495. /* # line 916 "gram.in" */
  1496. { yyval.expval = mkexpr(OPSLASH, yypvt[-2].expval, yypvt[-0].expval); } break;
  1497. case 196:
  1498. /* # line 918 "gram.in" */
  1499. { yyval.expval = mkexpr(OPPOWER, yypvt[-2].expval, yypvt[-0].expval); } break;
  1500. case 197:
  1501. /* # line 920 "gram.in" */
  1502. { if(yypvt[-1].ival == OPMINUS)
  1503.             yyval.expval = mkexpr(OPNEG, yypvt[-0].expval, ENULL);
  1504.           else    yyval.expval = yypvt[-0].expval;
  1505.         } break;
  1506. case 198:
  1507. /* # line 925 "gram.in" */
  1508. { NO66("concatenation operator //");
  1509.           yyval.expval = mkexpr(OPCONCAT, yypvt[-2].expval, yypvt[-0].expval); } break;
  1510. case 200:
  1511. /* # line 930 "gram.in" */
  1512. {
  1513.         if(yypvt[-3].labval->labdefined)
  1514.             execerr("no backward DO loops", CNULL);
  1515.         yypvt[-3].labval->blklevel = blklevel+1;
  1516.         exdo(yypvt[-3].labval->labelno, NPNULL, yypvt[-0].chval);
  1517.         } break;
  1518. case 201:
  1519. /* # line 937 "gram.in" */
  1520. {
  1521.         exdo((int)(ctls - ctlstack - 2), NPNULL, yypvt[-0].chval);
  1522.         NOEXT("DO without label");
  1523.         } break;
  1524. case 202:
  1525. /* # line 942 "gram.in" */
  1526. { exenddo(NPNULL); } break;
  1527. case 203:
  1528. /* # line 944 "gram.in" */
  1529. { exendif();  thiswasbranch = NO; } break;
  1530. case 205:
  1531. /* # line 947 "gram.in" */
  1532. { exelif(yypvt[-2].expval); lastwasbranch = NO; } break;
  1533. case 206:
  1534. /* # line 949 "gram.in" */
  1535. { exelse(); lastwasbranch = NO; } break;
  1536. case 207:
  1537. /* # line 951 "gram.in" */
  1538. { exendif(); lastwasbranch = NO; } break;
  1539. case 208:
  1540. /* # line 955 "gram.in" */
  1541. { exif(yypvt[-1].expval); } break;
  1542. case 209:
  1543. /* # line 959 "gram.in" */
  1544. { yyval.chval = mkchain((char *)yypvt[-2].namval, yypvt[-0].chval); } break;
  1545. case 211:
  1546. /* # line 964 "gram.in" */
  1547. { yyval.chval = mkchain(CNULL, (chainp)yypvt[-1].expval); } break;
  1548. case 212:
  1549. /* # line 968 "gram.in" */
  1550. { exequals((struct Primblock *)yypvt[-2].expval, yypvt[-0].expval); } break;
  1551. case 213:
  1552. /* # line 970 "gram.in" */
  1553. { exassign(yypvt[-0].namval, yypvt[-2].labval); } break;
  1554. case 216:
  1555. /* # line 974 "gram.in" */
  1556. { inioctl = NO; } break;
  1557. case 217:
  1558. /* # line 976 "gram.in" */
  1559. { exarif(yypvt[-6].expval, yypvt[-4].labval, yypvt[-2].labval, yypvt[-0].labval);  thiswasbranch = YES; } break;
  1560. case 218:
  1561. /* # line 978 "gram.in" */
  1562. { excall(yypvt[-0].namval, LBNULL, 0, labarray); } break;
  1563. case 219:
  1564. /* # line 980 "gram.in" */
  1565. { excall(yypvt[-2].namval, LBNULL, 0, labarray); } break;
  1566. case 220:
  1567. /* # line 982 "gram.in" */
  1568. { if(nstars < maxlablist)
  1569.             excall(yypvt[-3].namval, mklist(revchain(yypvt[-1].chval)), nstars, labarray);
  1570.           else
  1571.             many("alternate returns", 'l', maxlablist);
  1572.         } break;
  1573. case 221:
  1574. /* # line 988 "gram.in" */
  1575. { exreturn(yypvt[-0].expval);  thiswasbranch = YES; } break;
  1576. case 222:
  1577. /* # line 990 "gram.in" */
  1578. { exstop(yypvt[-2].ival, yypvt[-0].expval);  thiswasbranch = yypvt[-2].ival; } break;
  1579. case 223:
  1580. /* # line 994 "gram.in" */
  1581. { yyval.labval = mklabel( convci(toklen, token) ); } break;
  1582. case 224:
  1583. /* # line 998 "gram.in" */
  1584. { if(parstate == OUTSIDE)
  1585.             {
  1586.             newproc();
  1587.             startproc(ESNULL, CLMAIN);
  1588.             }
  1589.         } break;
  1590. case 225:
  1591. /* # line 1007 "gram.in" */
  1592. { exgoto(yypvt[-0].labval);  thiswasbranch = YES; } break;
  1593. case 226:
  1594. /* # line 1009 "gram.in" */
  1595. { exasgoto(yypvt[-0].namval);  thiswasbranch = YES; } break;
  1596. case 227:
  1597. /* # line 1011 "gram.in" */
  1598. { exasgoto(yypvt[-4].namval);  thiswasbranch = YES; } break;
  1599. case 228:
  1600. /* # line 1013 "gram.in" */
  1601. { if(nstars < maxlablist)
  1602.             putcmgo(putx(fixtype(yypvt[-0].expval)), nstars, labarray);
  1603.           else
  1604.             many("labels in computed GOTO list", 'l', maxlablist);
  1605.         } break;
  1606. case 231:
  1607. /* # line 1025 "gram.in" */
  1608. { nstars = 0; yyval.namval = yypvt[-0].namval; } break;
  1609. case 232:
  1610. /* # line 1029 "gram.in" */
  1611. { yyval.chval = yypvt[-0].expval ? mkchain((char *)yypvt[-0].expval,CHNULL) : CHNULL; } break;
  1612. case 233:
  1613. /* # line 1031 "gram.in" */
  1614. { yyval.chval = yypvt[-0].expval ? mkchain((char *)yypvt[-0].expval, yypvt[-2].chval) : yypvt[-2].chval; } break;
  1615. case 235:
  1616. /* # line 1036 "gram.in" */
  1617. { if(nstars < maxlablist) labarray[nstars++] = yypvt[-0].labval; yyval.expval = 0; } break;
  1618. case 236:
  1619. /* # line 1040 "gram.in" */
  1620. { yyval.ival = 0; } break;
  1621. case 237:
  1622. /* # line 1042 "gram.in" */
  1623. { yyval.ival = 2; } break;
  1624. case 238:
  1625. /* # line 1046 "gram.in" */
  1626. { yyval.chval = mkchain((char *)yypvt[-0].expval, CHNULL); } break;
  1627. case 239:
  1628. /* # line 1048 "gram.in" */
  1629. { yyval.chval = hookup(yypvt[-2].chval, mkchain((char *)yypvt[-0].expval,CHNULL) ); } break;
  1630. case 240:
  1631. /* # line 1052 "gram.in" */
  1632. { if(parstate == OUTSIDE)
  1633.             {
  1634.             newproc();
  1635.             startproc(ESNULL, CLMAIN);
  1636.             }
  1637.  
  1638. /* This next statement depends on the ordering of the state table encoding */
  1639.  
  1640.           if(parstate < INDATA) enddcl();
  1641.         } break;
  1642. case 241:
  1643. /* # line 1065 "gram.in" */
  1644. { intonly = YES; } break;
  1645. case 242:
  1646. /* # line 1069 "gram.in" */
  1647. { intonly = NO; } break;
  1648. case 243:
  1649. /* # line 1074 "gram.in" */
  1650. { endio(); } break;
  1651. case 245:
  1652. /* # line 1079 "gram.in" */
  1653. { ioclause(IOSUNIT, yypvt[-0].expval); endioctl(); } break;
  1654. case 246:
  1655. /* # line 1081 "gram.in" */
  1656. { ioclause(IOSUNIT, ENULL); endioctl(); } break;
  1657. case 247:
  1658. /* # line 1083 "gram.in" */
  1659. { ioclause(IOSUNIT, IOSTDERR); endioctl(); } break;
  1660. case 249:
  1661. /* # line 1086 "gram.in" */
  1662. { doio(CHNULL); } break;
  1663. case 250:
  1664. /* # line 1088 "gram.in" */
  1665. { doio(CHNULL); } break;
  1666. case 251:
  1667. /* # line 1090 "gram.in" */
  1668. { doio(revchain(yypvt[-0].chval)); } break;
  1669. case 252:
  1670. /* # line 1092 "gram.in" */
  1671. { doio(revchain(yypvt[-0].chval)); } break;
  1672. case 253:
  1673. /* # line 1094 "gram.in" */
  1674. { doio(revchain(yypvt[-0].chval)); } break;
  1675. case 254:
  1676. /* # line 1096 "gram.in" */
  1677. { doio(CHNULL); } break;
  1678. case 255:
  1679. /* # line 1098 "gram.in" */
  1680. { doio(revchain(yypvt[-0].chval)); } break;
  1681. case 256:
  1682. /* # line 1100 "gram.in" */
  1683. { doio(CHNULL); } break;
  1684. case 257:
  1685. /* # line 1102 "gram.in" */
  1686. { doio(revchain(yypvt[-0].chval)); } break;
  1687. case 259:
  1688. /* # line 1109 "gram.in" */
  1689. { iostmt = IOBACKSPACE; } break;
  1690. case 260:
  1691. /* # line 1111 "gram.in" */
  1692. { iostmt = IOREWIND; } break;
  1693. case 261:
  1694. /* # line 1113 "gram.in" */
  1695. { iostmt = IOENDFILE; } break;
  1696. case 263:
  1697. /* # line 1120 "gram.in" */
  1698. { iostmt = IOINQUIRE; } break;
  1699. case 264:
  1700. /* # line 1122 "gram.in" */
  1701. { iostmt = IOOPEN; } break;
  1702. case 265:
  1703. /* # line 1124 "gram.in" */
  1704. { iostmt = IOCLOSE; } break;
  1705. case 266:
  1706. /* # line 1128 "gram.in" */
  1707. {
  1708.         ioclause(IOSUNIT, ENULL);
  1709.         ioclause(IOSFMT, yypvt[-0].expval);
  1710.         endioctl();
  1711.         } break;
  1712. case 267:
  1713. /* # line 1134 "gram.in" */
  1714. {
  1715.         ioclause(IOSUNIT, ENULL);
  1716.         ioclause(IOSFMT, ENULL);
  1717.         endioctl();
  1718.         } break;
  1719. case 268:
  1720. /* # line 1142 "gram.in" */
  1721. {
  1722.           ioclause(IOSUNIT, yypvt[-1].expval);
  1723.           endioctl();
  1724.         } break;
  1725. case 269:
  1726. /* # line 1147 "gram.in" */
  1727. { endioctl(); } break;
  1728. case 272:
  1729. /* # line 1155 "gram.in" */
  1730. { ioclause(IOSPOSITIONAL, yypvt[-0].expval); } break;
  1731. case 273:
  1732. /* # line 1157 "gram.in" */
  1733. { ioclause(IOSPOSITIONAL, ENULL); } break;
  1734. case 274:
  1735. /* # line 1159 "gram.in" */
  1736. { ioclause(IOSPOSITIONAL, IOSTDERR); } break;
  1737. case 275:
  1738. /* # line 1161 "gram.in" */
  1739. { ioclause(yypvt[-1].ival, yypvt[-0].expval); } break;
  1740. case 276:
  1741. /* # line 1163 "gram.in" */
  1742. { ioclause(yypvt[-1].ival, ENULL); } break;
  1743. case 277:
  1744. /* # line 1165 "gram.in" */
  1745. { ioclause(yypvt[-1].ival, IOSTDERR); } break;
  1746. case 278:
  1747. /* # line 1169 "gram.in" */
  1748. { yyval.ival = iocname(); } break;
  1749. case 279:
  1750. /* # line 1173 "gram.in" */
  1751. { iostmt = IOREAD; } break;
  1752. case 280:
  1753. /* # line 1177 "gram.in" */
  1754. { iostmt = IOWRITE; } break;
  1755. case 281:
  1756. /* # line 1181 "gram.in" */
  1757. {
  1758.         iostmt = IOWRITE;
  1759.         ioclause(IOSUNIT, ENULL);
  1760.         ioclause(IOSFMT, yypvt[-1].expval);
  1761.         endioctl();
  1762.         } break;
  1763. case 282:
  1764. /* # line 1188 "gram.in" */
  1765. {
  1766.         iostmt = IOWRITE;
  1767.         ioclause(IOSUNIT, ENULL);
  1768.         ioclause(IOSFMT, ENULL);
  1769.         endioctl();
  1770.         } break;
  1771. case 283:
  1772. /* # line 1197 "gram.in" */
  1773. { yyval.chval = mkchain((char *)yypvt[-0].tagval, CHNULL); } break;
  1774. case 284:
  1775. /* # line 1199 "gram.in" */
  1776. { yyval.chval = mkchain((char *)yypvt[-0].tagval, yypvt[-2].chval); } break;
  1777. case 285:
  1778. /* # line 1203 "gram.in" */
  1779. { yyval.tagval = (tagptr) yypvt[-0].expval; } break;
  1780. case 286:
  1781. /* # line 1205 "gram.in" */
  1782. { yyval.tagval = (tagptr) mkiodo(yypvt[-1].chval,revchain(yypvt[-3].chval)); } break;
  1783. case 287:
  1784. /* # line 1209 "gram.in" */
  1785. { yyval.chval = mkchain((char *)yypvt[-0].expval, CHNULL); } break;
  1786. case 288:
  1787. /* # line 1211 "gram.in" */
  1788. { yyval.chval = mkchain((char *)yypvt[-0].tagval, CHNULL); } break;
  1789. case 290:
  1790. /* # line 1216 "gram.in" */
  1791. { yyval.chval = mkchain((char *)yypvt[-0].expval, mkchain((char *)yypvt[-2].expval, CHNULL) ); } break;
  1792. case 291:
  1793. /* # line 1218 "gram.in" */
  1794. { yyval.chval = mkchain((char *)yypvt[-0].tagval, mkchain((char *)yypvt[-2].expval, CHNULL) ); } break;
  1795. case 292:
  1796. /* # line 1220 "gram.in" */
  1797. { yyval.chval = mkchain((char *)yypvt[-0].expval, mkchain((char *)yypvt[-2].tagval, CHNULL) ); } break;
  1798. case 293:
  1799. /* # line 1222 "gram.in" */
  1800. { yyval.chval = mkchain((char *)yypvt[-0].tagval, mkchain((char *)yypvt[-2].tagval, CHNULL) ); } break;
  1801. case 294:
  1802. /* # line 1224 "gram.in" */
  1803. { yyval.chval = mkchain((char *)yypvt[-0].expval, yypvt[-2].chval); } break;
  1804. case 295:
  1805. /* # line 1226 "gram.in" */
  1806. { yyval.chval = mkchain((char *)yypvt[-0].tagval, yypvt[-2].chval); } break;
  1807. case 296:
  1808. /* # line 1230 "gram.in" */
  1809. { yyval.tagval = (tagptr) yypvt[-0].expval; } break;
  1810. case 297:
  1811. /* # line 1232 "gram.in" */
  1812. { yyval.tagval = (tagptr) yypvt[-1].expval; } break;
  1813. case 298:
  1814. /* # line 1234 "gram.in" */
  1815. { yyval.tagval = (tagptr) mkiodo(yypvt[-1].chval, mkchain((char *)yypvt[-3].expval, CHNULL) ); } break;
  1816. case 299:
  1817. /* # line 1236 "gram.in" */
  1818. { yyval.tagval = (tagptr) mkiodo(yypvt[-1].chval, mkchain((char *)yypvt[-3].tagval, CHNULL) ); } break;
  1819. case 300:
  1820. /* # line 1238 "gram.in" */
  1821. { yyval.tagval = (tagptr) mkiodo(yypvt[-1].chval, revchain(yypvt[-3].chval)); } break;
  1822. case 301:
  1823. /* # line 1242 "gram.in" */
  1824. { startioctl(); } break;
  1825.     }
  1826.     goto yystack;  /* stack new state and value */
  1827. }
  1828.